\begin{Exercise}[title={Echo 服务},difficulty=1]
\label{ex:echo}
\Question\label{ex:echo q1}
编写一个简单的 echo 服务。使其监听于本地的 TCP 端口 8053 上。
它应当可以读取一行（以换行符结尾），将这行原样返回然后关闭连接。

\Question\label{ex:echo q2}
让这个服务可以并发，这样每个请求都可以在独立的 goroutine 中进行处理。

\end{Exercise}

\begin{Answer}
\Question
一个简单的 echo 服务器是这样：
\lstinputlisting[caption=简易 echo 服务器]{ex-communication/src/echo.go}

当运行起来的时候可以看到如下内容：
\vskip\baselineskip
\begin{display}
\pr \user{nc 127.0.0.1 8053}
\user{Go is *awesome*}
Go is *awesome*
\end{display}

\Question
为了使其能够并发处理链接，\emph{只需要修改一行代码}，就是：
\begin{lstlisting}
if c, err := l.Accept(); err == nil { Echo(c) }
\end{lstlisting}
改为：
\begin{lstlisting}
if c, err := l.Accept(); err == nil { go Echo(c) }
\end{lstlisting}
\end{Answer}
